package web;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.birrap.ejb.BaresCervezasTapasVasosTBeanLocal;
import org.birrap.ejb.BaresUsuarioTBeanLocal;
import org.birrap.entities.BaresCervezasTapasVasosT;
import org.birrap.entities.BaresT;
import org.birrap.entities.BaresUsuarioT;
import org.birrap.entities.BaresUsuarioTPK;
import org.birrap.entities.UsuariosT;

@ManagedBean
@RequestScoped
public class FavoritosManagedBean {
    
    @EJB
    private BaresUsuarioTBeanLocal baresUsuarioBean;
    
    @EJB
    private BaresCervezasTapasVasosTBeanLocal baresCervezasTapasVasosBean;
     
    private BaresT selectedBar;
    
    private DetalleManagedBean detalleManagedBean;
           
    private List<BaresUsuarioT> listaBaresUsuario = new ArrayList<BaresUsuarioT>();

    private List<BaresCervezasTapasVasosT> listaBaresCervezasTapasVasos = 
            new ArrayList<BaresCervezasTapasVasosT>();
        
    private FacesContext context;
    
    private double cervezaMasBarataEnBar;

    
    public FavoritosManagedBean() 
    {
        context = FacesContext.getCurrentInstance();
    }
    
    public void eliminarFavorito ()
    {
        UsuariosT usuario = (UsuariosT) FacesContext.getCurrentInstance()
                                        .getExternalContext()
                                        .getSessionMap()
                                        .get("usuario");
        
        BaresUsuarioTPK baresUsuarioTPK = new BaresUsuarioTPK();
        baresUsuarioTPK.setCorreo(usuario.getCorreo());
        baresUsuarioTPK.setIdBar(selectedBar.getIdBar());
        
        if (baresUsuarioBean.remove(baresUsuarioTPK))
        {
           context
                        .addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                                                           selectedBar.getNombre() +
                                                           " se ha eliminado de sus favoritos", 
                                                           selectedBar.getNombre() +
                                                           " se ha eliminado de sus favoritos"));
        }
        else
        {
            context
                        .addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                           "No se a podido eliminar de sus favoritos el local " +
                                                           selectedBar.getNombre() +
                                                           " debido a un error interno.", 
                                                           "No se a podido eliminar de sus favoritos el local " +
                                                           selectedBar.getNombre() +
                                                           " debido a un error interno."));
        }
        
        getListaBaresUsuario();
    }
    
    public String irADetalles ()
    {
        FacesContext facesContext = FacesContext.getCurrentInstance(); 
        
        detalleManagedBean = FacesContext.getCurrentInstance()
                                         .getApplication()
                                         .evaluateExpressionGet(facesContext, 
                                                                "#{detalleManagedBean}", 
                                                                DetalleManagedBean.class); 
        detalleManagedBean.setBar(selectedBar);
        
        return "DETALLE";
    }

    public List<BaresUsuarioT> getListaBaresUsuario() {
        
        UsuariosT usuario = (UsuariosT) FacesContext.getCurrentInstance()
                                                    .getExternalContext()
                                                    .getSessionMap()
                                                    .get("usuario");
        if(usuario != null){
            listaBaresUsuario = baresUsuarioBean.findByCorreoYFavorito(usuario.getCorreo());
        }
        else
        {
            listaBaresUsuario = new ArrayList<BaresUsuarioT>();
        }
        
        return listaBaresUsuario;
    }
    
    public List<BaresCervezasTapasVasosT> getColeccionBares (BaresT bar)
    {
         listaBaresCervezasTapasVasos = baresCervezasTapasVasosBean
                        .findBaresByIdBar(bar.getIdBar());
         
         return listaBaresCervezasTapasVasos;
    }
    
    public double getcervezaMasBarataEnBar(BaresCervezasTapasVasosT barCerTapVaso)
    {
        cervezaMasBarataEnBar = 
                baresCervezasTapasVasosBean.findMasBarataByIdBar(barCerTapVaso.getBaresT()
                                           .getIdBar());
        return cervezaMasBarataEnBar;
    }

    public void setListaBaresUsuario(List<BaresUsuarioT> listaBaresUsuario) {
        this.listaBaresUsuario = listaBaresUsuario;
    }

    public BaresT getSelectedBar() {
        return selectedBar;
    }

    public void setSelectedBar(BaresT selectedBar) {
        this.selectedBar = selectedBar;
    } 

    public List<BaresCervezasTapasVasosT> getListaBaresCervezasTapasVasos() {
        return listaBaresCervezasTapasVasos;
    }

    public void setListaBaresCervezasTapasVasos(List<BaresCervezasTapasVasosT> listaBaresCervezasTapasVasos) {
        this.listaBaresCervezasTapasVasos = listaBaresCervezasTapasVasos;
    }
}
